FILTERS=position.o radius.o duplicate.o arcdist.o polygon.o smplrout.o \
reverse_route.o sort.o stackfilter.o trackfilter.o discard.o \
- nukedata.o interpolate.o
+ nukedata.o interpolate.o transform.o
JEEPS=jeeps/gpsapp.o jeeps/gpscom.o \
jeeps/gpsmath.o jeeps/gpsmem.o \
trackfilter.o: trackfilter.c defs.h config.h queue.h gbtypes.h \
zlib/zlib.h zlib/zconf.h gbfile.h cet.h cet_util.h inifile.h \
filterdefs.h strptime.h grtcirc.h
+transform.o: transform.c defs.h filterdefs.h
unicsv.o: unicsv.c defs.h config.h queue.h gbtypes.h zlib/zlib.h \
zlib/zconf.h gbfile.h cet.h cet_util.h inifile.h csv_util.h \
jeeps/gpsmath.h jeeps/gps.h jeeps/../defs.h jeeps/gpsport.h \
extern filter_vecs_t discard_vecs;
extern filter_vecs_t nuke_vecs;
extern filter_vecs_t interpolatefilt_vecs;
+extern filter_vecs_t transform_vecs;
static
fl_vecs_t filter_vec_list[] = {
"track",
"Manipulate track lists"
},
+ {
+ &transform_vecs,
+ "transform",
+ "Transformate waypoints into a route, tracks into routes, ..."
+ },
#endif
{
NULL,
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<gpx
+ version="1.0"
+creator="GPSBabel - http://www.gpsbabel.org"
+xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+xmlns="http://www.topografix.com/GPX/1/0"
+xsi:schemaLocation="http://www.topografix.com/GPX/1/0 http://www.topografix.com/GPX/1/0/gpx.xsd http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd">
+<time>1970-01-01T00:00:00Z</time>
+<bounds minlat="42.401051000" minlon ="-71.126602000" maxlat="42.468655000" maxlon="-71.102973000" />
+<rte>
+ <rtept lat="42.438878000" lon="-71.119277000">
+ <ele>44.586548</ele>
+<time>2001-11-28T21:05:28Z</time>
+ <name>5066</name>
+ <cmt>5066</cmt>
+ <desc>5066</desc>
+ <sym>Crossing</sym>
+<type>Crossing</type>
+ </rtept>
+ <rtept lat="42.439227000" lon="-71.119689000">
+ <ele>57.607200</ele>
+<time>2001-06-02T03:26:55Z</time>
+ <name>5067</name>
+ <cmt>5067</cmt>
+ <desc>5067</desc>
+ <sym>Dot</sym>
+<type>Intersection</type>
+ </rtept>
+ <rtept lat="42.438917000" lon="-71.116146000">
+ <ele>44.826904</ele>
+<time>2001-11-16T23:03:38Z</time>
+ <name>5096</name>
+ <cmt>5096</cmt>
+ <desc>5096</desc>
+ <sym>Dot</sym>
+<type>Dot</type>
+ </rtept>
+ <rtept lat="42.443904000" lon="-71.122044000">
+ <ele>50.594727</ele>
+<time>2001-11-28T21:05:28Z</time>
+ <name>5142</name>
+ <cmt>5142</cmt>
+ <desc>5142</desc>
+ <sym>Dot</sym>
+<type>Dot</type>
+ </rtept>
+ <rtept lat="42.447298000" lon="-71.121447000">
+ <ele>127.711200</ele>
+<time>2001-06-02T03:26:58Z</time>
+ <name>5156</name>
+ <cmt>5156</cmt>
+ <desc>5156</desc>
+ <sym>Dot</sym>
+<type>Intersection</type>
+ </rtept>
+ <rtept lat="42.454873000" lon="-71.125094000">
+ <ele>96.926400</ele>
+<time>2001-06-02T03:26:59Z</time>
+ <name>5224</name>
+ <cmt>5224</cmt>
+ <desc>5224</desc>
+ <sym>Dot</sym>
+<type>Intersection</type>
+ </rtept>
+ <rtept lat="42.459079000" lon="-71.124988000">
+ <ele>82.600800</ele>
+<time>2001-06-02T03:26:59Z</time>
+ <name>5229</name>
+ <cmt>5229</cmt>
+ <desc>5229</desc>
+ <sym>Dot</sym>
+<type>Intersection</type>
+ </rtept>
+ <rtept lat="42.456979000" lon="-71.124474000">
+ <ele>82.905600</ele>
+<time>2001-06-02T03:26:59Z</time>
+ <name>5237</name>
+ <cmt>5237</cmt>
+ <desc>5237</desc>
+ <sym>Dot</sym>
+<type>Intersection</type>
+ </rtept>
+ <rtept lat="42.454401000" lon="-71.120990000">
+ <ele>66.696655</ele>
+<time>2001-11-28T21:05:28Z</time>
+ <name>5254</name>
+ <cmt>5254</cmt>
+ <desc>5254</desc>
+ <sym>Dot</sym>
+<type>Dot</type>
+ </rtept>
+ <rtept lat="42.451442000" lon="-71.121746000">
+ <ele>74.627442</ele>
+<time>2001-11-07T23:53:41Z</time>
+ <name>5258</name>
+ <cmt>5258</cmt>
+ <desc>5258</desc>
+ <sym>Dot</sym>
+<type>Dot</type>
+ </rtept>
+ <rtept lat="42.454404000" lon="-71.120660000">
+ <ele>65.254761</ele>
+<time>2001-11-28T21:05:28Z</time>
+ <name>5264</name>
+ <cmt>5264</cmt>
+ <desc>5264</desc>
+ <sym>Dot</sym>
+<type>Dot</type>
+ </rtept>
+ <rtept lat="42.457761000" lon="-71.121045000">
+ <ele>77.419200</ele>
+<time>2001-06-02T03:27:00Z</time>
+ <name>526708</name>
+ <cmt>526708</cmt>
+ <desc>526708</desc>
+ <sym>Dot</sym>
+<type>Intersection</type>
+ </rtept>
+ <rtept lat="42.457089000" lon="-71.120313000">
+ <ele>74.676000</ele>
+<time>2001-06-02T03:27:00Z</time>
+ <name>526750</name>
+ <cmt>526750</cmt>
+ <desc>526750</desc>
+ <sym>Dot</sym>
+<type>Intersection</type>
+ </rtept>
+ <rtept lat="42.456592000" lon="-71.119676000">
+ <ele>78.713135</ele>
+<time>2001-11-07T23:53:41Z</time>
+ <name>527614</name>
+ <cmt>527614</cmt>
+ <desc>527614</desc>
+ <sym>Dot</sym>
+<type>Dot</type>
+ </rtept>
+ <rtept lat="42.456252000" lon="-71.119356000">
+ <ele>78.713135</ele>
+<time>2001-11-07T23:53:41Z</time>
+ <name>527631</name>
+ <cmt>527631</cmt>
+ <desc>527631</desc>
+ <sym>Dot</sym>
+<type>Dot</type>
+ </rtept>
+ <rtept lat="42.458148000" lon="-71.119135000">
+ <ele>68.275200</ele>
+<time>2001-06-02T03:27:00Z</time>
+ <name>5278</name>
+ <cmt>5278</cmt>
+ <desc>5278</desc>
+ <sym>Dot</sym>
+<type>Intersection</type>
+ </rtept>
+ <rtept lat="42.459377000" lon="-71.117693000">
+ <ele>64.008000</ele>
+<time>2001-06-02T03:27:01Z</time>
+ <name>5289</name>
+ <cmt>5289</cmt>
+ <desc>5289</desc>
+ <sym>Dot</sym>
+<type>Intersection</type>
+ </rtept>
+ <rtept lat="42.464183000" lon="-71.119828000">
+ <ele>52.997925</ele>
+<time>2001-11-28T21:05:28Z</time>
+ <name>5374FIRE</name>
+ <cmt>5374FIRE</cmt>
+ <desc>5374FIRE</desc>
+ <sym>Dot</sym>
+<type>Dot</type>
+ </rtept>
+ <rtept lat="42.465650000" lon="-71.119399000">
+ <ele>56.388000</ele>
+<time>2001-06-02T03:27:02Z</time>
+ <name>5376</name>
+ <cmt>5376</cmt>
+ <desc>5376</desc>
+ <sym>Dot</sym>
+<type>Intersection</type>
+ </rtept>
+ <rtept lat="42.439018000" lon="-71.114456000">
+ <ele>56.388000</ele>
+<time>2001-06-02T03:26:55Z</time>
+ <name>6006</name>
+ <cmt>600698</cmt>
+ <desc>600698</desc>
+ <sym>Dot</sym>
+<type>Intersection</type>
+ </rtept>
+ <rtept lat="42.438594000" lon="-71.114803000">
+ <ele>46.028564</ele>
+<time>2001-11-28T21:05:28Z</time>
+ <name>6006BLUE</name>
+ <cmt>6006BLUE</cmt>
+ <desc>6006BLUE</desc>
+ <sym>Dot</sym>
+<type>Dot</type>
+ </rtept>
+ <rtept lat="42.436757000" lon="-71.113223000">
+ <ele>37.616943</ele>
+<time>2001-11-28T21:05:28Z</time>
+ <name>6014MEADOW</name>
+ <cmt>6014MEADOW</cmt>
+ <desc>6014MEADOW</desc>
+ <sym>Dot</sym>
+<type>Dot</type>
+ </rtept>
+ <rtept lat="42.441754000" lon="-71.113220000">
+ <ele>56.388000</ele>
+<time>2001-06-02T03:26:55Z</time>
+ <name>6029</name>
+ <cmt>6029</cmt>
+ <desc>6029</desc>
+ <sym>Dot</sym>
+<type>Intersection</type>
+ </rtept>
+ <rtept lat="42.436243000" lon="-71.109075000">
+ <ele>50.292000</ele>
+<time>2001-06-02T03:27:05Z</time>
+ <name>6053</name>
+ <cmt>6053</cmt>
+ <desc>6053</desc>
+ <sym>Dot</sym>
+<type>Intersection</type>
+ </rtept>
+ <rtept lat="42.439250000" lon="-71.107500000">
+ <ele>25.603200</ele>
+<time>2001-06-02T03:26:57Z</time>
+ <name>6066</name>
+ <cmt>6066</cmt>
+ <desc>6066</desc>
+ <sym>Dot</sym>
+<type>Intersection</type>
+ </rtept>
+ <rtept lat="42.439764000" lon="-71.107582000">
+ <ele>34.442400</ele>
+<time>2001-06-02T03:26:57Z</time>
+ <name>6067</name>
+ <cmt>6067</cmt>
+ <desc>6067</desc>
+ <sym>Dot</sym>
+<type>Intersection</type>
+ </rtept>
+ <rtept lat="42.434766000" lon="-71.105874000">
+ <ele>30.480000</ele>
+<time>2001-06-02T03:26:57Z</time>
+ <name>6071</name>
+ <cmt>6071</cmt>
+ <desc>6071</desc>
+ <sym>Dot</sym>
+<type>Intersection</type>
+ </rtept>
+ <rtept lat="42.433304000" lon="-71.106599000">
+ <ele>15.240000</ele>
+<time>2001-06-02T03:26:56Z</time>
+ <name>6073</name>
+ <cmt>6073</cmt>
+ <desc>6073</desc>
+ <sym>Dot</sym>
+<type>Intersection</type>
+ </rtept>
+ <rtept lat="42.437338000" lon="-71.104772000">
+ <ele>37.795200</ele>
+<time>2001-06-02T03:26:57Z</time>
+ <name>6084</name>
+ <cmt>6084</cmt>
+ <desc>6084</desc>
+ <sym>Dot</sym>
+<type>Intersection</type>
+ </rtept>
+ <rtept lat="42.442196000" lon="-71.110975000">
+ <ele>64.008000</ele>
+<time>2001-06-02T03:26:55Z</time>
+ <name>6130</name>
+ <cmt>6130</cmt>
+ <desc>6130</desc>
+ <sym>Dot</sym>
+<type>Intersection</type>
+ </rtept>
+ <rtept lat="42.442981000" lon="-71.111441000">
+ <ele>64.008000</ele>
+<time>2001-06-02T03:26:58Z</time>
+ <name>6131</name>
+ <cmt>6131</cmt>
+ <desc>6131</desc>
+ <sym>Dot</sym>
+<type>Intersection</type>
+ </rtept>
+ <rtept lat="42.444773000" lon="-71.108882000">
+ <ele>62.788800</ele>
+<time>2001-06-02T03:27:05Z</time>
+ <name>6153</name>
+ <cmt>6153</cmt>
+ <desc>6153</desc>
+ <sym>Dot</sym>
+<type>Intersection</type>
+ </rtept>
+ <rtept lat="42.443592000" lon="-71.106301000">
+ <ele>55.473600</ele>
+<time>2001-06-02T03:27:05Z</time>
+ <name>6171</name>
+ <cmt>6171</cmt>
+ <desc>6171</desc>
+ <sym>Dot</sym>
+<type>Intersection</type>
+ </rtept>
+ <rtept lat="42.447804000" lon="-71.106624000">
+ <ele>62.484000</ele>
+<time>2001-06-02T03:27:04Z</time>
+ <name>6176</name>
+ <cmt>6176</cmt>
+ <desc>6176</desc>
+ <sym>Dot</sym>
+<type>Intersection</type>
+ </rtept>
+ <rtept lat="42.448448000" lon="-71.106158000">
+ <ele>62.179200</ele>
+<time>2001-06-02T03:27:04Z</time>
+ <name>6177</name>
+ <cmt>6177</cmt>
+ <desc>6177</desc>
+ <sym>Dot</sym>
+<type>Intersection</type>
+ </rtept>
+ <rtept lat="42.453415000" lon="-71.106783000">
+ <ele>69.799200</ele>
+<time>2001-06-02T03:26:55Z</time>
+ <name>6272</name>
+ <cmt>6272</cmt>
+ <desc>6272</desc>
+ <sym>Dot</sym>
+<type>Intersection</type>
+ </rtept>
+ <rtept lat="42.453434000" lon="-71.107253000">
+ <ele>73.152000</ele>
+<time>2001-06-02T03:26:56Z</time>
+ <name>6272</name>
+ <cmt>6272</cmt>
+ <desc>6272</desc>
+ <sym>Dot</sym>
+<type>Intersection</type>
+ </rtept>
+ <rtept lat="42.458298000" lon="-71.106771000">
+ <ele>70.104000</ele>
+<time>2001-06-02T03:27:04Z</time>
+ <name>6278</name>
+ <cmt>6278</cmt>
+ <desc>6278</desc>
+ <sym>Dot</sym>
+<type>Intersection</type>
+ </rtept>
+ <rtept lat="42.451430000" lon="-71.105413000">
+ <ele>57.564209</ele>
+<time>2001-11-16T23:03:38Z</time>
+ <name>6280</name>
+ <cmt>6280</cmt>
+ <desc>6280</desc>
+ <sym>Dot</sym>
+<type>Dot</type>
+ </rtept>
+ <rtept lat="42.453845000" lon="-71.105206000">
+ <ele>66.696655</ele>
+<time>2001-11-16T23:03:38Z</time>
+ <name>6283</name>
+ <cmt>6283</cmt>
+ <desc>6283</desc>
+ <sym>Dot</sym>
+<type>Dot</type>
+ </rtept>
+ <rtept lat="42.459986000" lon="-71.106170000">
+ <ele>72.945191</ele>
+<time>2001-11-16T23:03:38Z</time>
+ <name>6289</name>
+ <cmt>6289</cmt>
+ <desc>6289</desc>
+ <sym>Dot</sym>
+<type>Dot</type>
+ </rtept>
+ <rtept lat="42.457616000" lon="-71.105116000">
+ <ele>72.847200</ele>
+<time>2001-06-02T03:27:04Z</time>
+ <name>6297</name>
+ <cmt>6297</cmt>
+ <desc>6297</desc>
+ <sym>Dot</sym>
+<type>Intersection</type>
+ </rtept>
+ <rtept lat="42.467110000" lon="-71.113574000">
+ <ele>53.644800</ele>
+<time>2001-06-02T03:27:02Z</time>
+ <name>6328</name>
+ <cmt>6328</cmt>
+ <desc>6328</desc>
+ <sym>Dot</sym>
+<type>Intersection</type>
+ </rtept>
+ <rtept lat="42.464202000" lon="-71.109863000">
+ <ele>43.891200</ele>
+<time>2001-06-02T03:27:03Z</time>
+ <name>6354</name>
+ <cmt>6354</cmt>
+ <desc>6354</desc>
+ <sym>Dot</sym>
+<type>Intersection</type>
+ </rtept>
+ <rtept lat="42.466459000" lon="-71.110067000">
+ <ele>48.768000</ele>
+<time>2001-06-02T03:27:02Z</time>
+ <name>635722</name>
+ <cmt>635722</cmt>
+ <desc>635722</desc>
+ <sym>Dot</sym>
+<type>Intersection</type>
+ </rtept>
+ <rtept lat="42.466557000" lon="-71.109410000">
+ <ele>49.072800</ele>
+<time>2001-06-02T03:27:02Z</time>
+ <name>635783</name>
+ <cmt>635783</cmt>
+ <desc>635783</desc>
+ <sym>Dot</sym>
+<type>Intersection</type>
+ </rtept>
+ <rtept lat="42.463495000" lon="-71.107117000">
+ <ele>62.484000</ele>
+<time>2001-06-02T03:27:03Z</time>
+ <name>6373</name>
+ <cmt>6373</cmt>
+ <desc>6373</desc>
+ <sym>Dot</sym>
+<type>Intersection</type>
+ </rtept>
+ <rtept lat="42.401051000" lon="-71.110241000">
+ <ele>3.962400</ele>
+<time>2001-06-02T03:26:56Z</time>
+ <name>6634</name>
+ <cmt>6634</cmt>
+ <desc>6634</desc>
+ <sym>Dot</sym>
+<type>Intersection</type>
+ </rtept>
+ <rtept lat="42.432621000" lon="-71.106532000">
+ <ele>13.411200</ele>
+<time>2001-06-02T03:26:56Z</time>
+ <name>6979</name>
+ <cmt>6979</cmt>
+ <desc>6979</desc>
+ <sym>Dot</sym>
+<type>Intersection</type>
+ </rtept>
+ <rtept lat="42.431033000" lon="-71.107883000">
+ <ele>34.012085</ele>
+<time>2001-11-16T23:03:38Z</time>
+ <name>6997</name>
+ <cmt>6997</cmt>
+ <desc>6997</desc>
+ <sym>Dot</sym>
+<type>Dot</type>
+ </rtept>
+ <rtept lat="42.465687000" lon="-71.107360000">
+ <ele>87.782400</ele>
+<time>2001-06-02T03:27:03Z</time>
+ <name>BEAR HILL</name>
+ <cmt>BEAR HILL TOWER</cmt>
+ <desc>Bear Hill Tower</desc>
+ <sym>Tall Tower</sym>
+<type>Tower</type>
+ </rtept>
+ <rtept lat="42.430950000" lon="-71.107628000">
+ <ele>23.469600</ele>
+<time>2001-06-02T00:18:15Z</time>
+ <name>BELLEVUE</name>
+ <cmt>BELLEVUE</cmt>
+ <desc>Bellevue Parking Lot</desc>
+ <sym>Parking Area</sym>
+<type>Parking</type>
+ </rtept>
+ <rtept lat="42.438666000" lon="-71.114079000">
+ <ele>43.384766</ele>
+<time>2001-11-28T21:05:28Z</time>
+ <name>6016</name>
+ <cmt>Bike Loop Connector</cmt>
+ <desc>Bike Loop Connector</desc>
+ <sym>Waypoint</sym>
+<type>Intersection</type>
+ </rtept>
+ <rtept lat="42.456469000" lon="-71.124651000">
+ <ele>89.916000</ele>
+<time>2001-06-02T03:26:59Z</time>
+ <name>5236BRIDGE</name>
+ <cmt>Bridge</cmt>
+ <desc>Bridge</desc>
+ <sym>Bridge</sym>
+<type>Bridge</type>
+ </rtept>
+ <rtept lat="42.465759000" lon="-71.119815000">
+ <ele>55.473600</ele>
+<time>2001-06-02T03:27:01Z</time>
+ <name>5376BRIDGE</name>
+ <cmt>Bridge</cmt>
+ <desc>Bridge</desc>
+ <sym>Bridge</sym>
+<type>Bridge</type>
+ </rtept>
+ <rtept lat="42.442993000" lon="-71.105878000">
+ <ele>52.730400</ele>
+<time>2001-06-02T03:27:05Z</time>
+ <name>6181CROSS</name>
+ <cmt>Crossing</cmt>
+ <desc>Crossing</desc>
+ <sym>Crossing</sym>
+<type>Crossing</type>
+ </rtept>
+ <rtept lat="42.435472000" lon="-71.109664000">
+ <ele>45.110400</ele>
+<time>2001-06-02T03:27:05Z</time>
+ <name>6042CROSS</name>
+ <cmt>Crossing</cmt>
+ <desc>Crossing</desc>
+ <sym>Crossing</sym>
+<type>Crossing</type>
+ </rtept>
+ <rtept lat="42.458516000" lon="-71.103646000">
+ <name>DARKHOLLPO</name>
+ <cmt>Dark Hollow Pond</cmt>
+ <desc>Dark Hollow Pond</desc>
+ <sym>Fishing Area</sym>
+ </rtept>
+ <rtept lat="42.443109000" lon="-71.112675000">
+ <ele>56.083200</ele>
+<time>2001-06-02T03:26:57Z</time>
+ <name>6121DEAD</name>
+ <cmt>Dead End</cmt>
+ <desc>Dead End</desc>
+ <sym>Danger Area</sym>
+<type>Dead End</type>
+ </rtept>
+ <rtept lat="42.449866000" lon="-71.119298000">
+ <ele>117.043200</ele>
+<time>2001-06-02T03:26:59Z</time>
+ <name>5179DEAD</name>
+ <cmt>Dead End</cmt>
+ <desc>Dead End</desc>
+ <sym>Danger Area</sym>
+<type>Dead End</type>
+ </rtept>
+ <rtept lat="42.459629000" lon="-71.116524000">
+ <ele>69.494400</ele>
+<time>2001-06-02T03:27:01Z</time>
+ <name>5299DEAD</name>
+ <cmt>Dead End</cmt>
+ <desc>Dead End</desc>
+ <sym>Danger Area</sym>
+<type>Dead End</type>
+ </rtept>
+ <rtept lat="42.465485000" lon="-71.119148000">
+ <ele>56.997600</ele>
+<time>2001-06-02T03:27:02Z</time>
+ <name>5376DEAD</name>
+ <cmt>Dead End</cmt>
+ <desc>Dead End</desc>
+ <sym>Danger Area</sym>
+<type>Dead End</type>
+ </rtept>
+ <rtept lat="42.462776000" lon="-71.109986000">
+ <ele>46.939200</ele>
+<time>2001-06-02T03:27:03Z</time>
+ <name>6353DEAD</name>
+ <cmt>Dead End</cmt>
+ <desc>Dead End</desc>
+ <sym>Danger Area</sym>
+<type>Dead End</type>
+ </rtept>
+ <rtept lat="42.446793000" lon="-71.108784000">
+ <ele>61.264800</ele>
+<time>2001-06-02T03:27:04Z</time>
+ <name>6155DEAD</name>
+ <cmt>Dead End</cmt>
+ <desc>Dead End</desc>
+ <sym>Danger Area</sym>
+<type>Dead End</type>
+ </rtept>
+ <rtept lat="42.451204000" lon="-71.126602000">
+ <ele>110.947200</ele>
+<time>2001-06-02T03:26:59Z</time>
+ <name>GATE14</name>
+ <cmt>Gate 14</cmt>
+ <desc>Gate 14</desc>
+ <sym>Truck Stop</sym>
+<type>Road</type>
+ </rtept>
+ <rtept lat="42.458499000" lon="-71.122078000">
+ <ele>77.724000</ele>
+<time>2001-06-02T03:27:00Z</time>
+ <name>GATE16</name>
+ <cmt>Gate 16</cmt>
+ <desc>Gate 16</desc>
+ <sym>Truck Stop</sym>
+<type>Road</type>
+ </rtept>
+ <rtept lat="42.459376000" lon="-71.119238000">
+ <ele>65.836800</ele>
+<time>2001-06-02T03:27:01Z</time>
+ <name>GATE17</name>
+ <cmt>Gate 17</cmt>
+ <desc>Gate 17</desc>
+ <sym>Truck Stop</sym>
+<type>Road</type>
+ </rtept>
+ <rtept lat="42.466353000" lon="-71.119240000">
+ <ele>57.302400</ele>
+<time>2001-06-02T03:27:02Z</time>
+ <name>GATE19</name>
+ <cmt>Gate 19</cmt>
+ <desc>Gate 19</desc>
+ <sym>Truck Stop</sym>
+<type>Road</type>
+ </rtept>
+ <rtept lat="42.468655000" lon="-71.107697000">
+ <ele>49.377600</ele>
+<time>2001-06-02T03:27:03Z</time>
+ <name>GATE21</name>
+ <cmt>Gate 21</cmt>
+ <desc>Gate 21</desc>
+ <sym>Truck Stop</sym>
+<type>Road</type>
+ </rtept>
+ <rtept lat="42.456718000" lon="-71.102973000">
+ <ele>81.076800</ele>
+<time>2001-06-02T03:27:03Z</time>
+ <name>GATE24</name>
+ <cmt>Gate 24</cmt>
+ <desc>Gate 24</desc>
+ <sym>Truck Stop</sym>
+<type>Road</type>
+ </rtept>
+ <rtept lat="42.430847000" lon="-71.107690000">
+ <ele>21.515015</ele>
+<time>2001-11-28T21:05:28Z</time>
+ <name>GATE5</name>
+ <cmt>Gate 5</cmt>
+ <desc>Gate 5</desc>
+ <sym>Truck Stop</sym>
+<type>Truck Stop</type>
+ </rtept>
+ <rtept lat="42.431240000" lon="-71.109236000">
+ <ele>26.561890</ele>
+<time>2001-11-07T23:53:41Z</time>
+ <name>GATE6</name>
+ <cmt>Gate 6</cmt>
+ <desc>Gate 6</desc>
+ <sym>Waypoint</sym>
+<type>Trail Head</type>
+ </rtept>
+ <rtept lat="42.439502000" lon="-71.106556000">
+ <ele>32.004000</ele>
+<time>2001-06-02T00:18:16Z</time>
+ <name>6077LOGS</name>
+ <cmt>Log Crossing</cmt>
+ <desc>Log Crossing</desc>
+ <sym>Amusement Park</sym>
+<type>Obstacle</type>
+ </rtept>
+ <rtept lat="42.449765000" lon="-71.122320000">
+ <ele>119.809082</ele>
+<time>2001-11-07T23:53:41Z</time>
+ <name>5148NANEPA</name>
+ <cmt>Nanepashemet Road Crossing</cmt>
+ <desc>Nanepashemet Road Crossing</desc>
+ <sym>Waypoint</sym>
+<type>Trail Head</type>
+ </rtept>
+ <rtept lat="42.457388000" lon="-71.119845000">
+ <ele>73.761600</ele>
+<time>2001-06-02T03:27:00Z</time>
+ <name>5267OBSTAC</name>
+ <cmt>Obstacle</cmt>
+ <desc>Obstacle</desc>
+ <sym>Amusement Park</sym>
+<type>Obstacle</type>
+ </rtept>
+ <rtept lat="42.434980000" lon="-71.109942000">
+ <ele>45.307495</ele>
+<time>2001-11-07T23:53:41Z</time>
+ <name>PANTHRCAVE</name>
+ <cmt>Panther Cave</cmt>
+ <desc>Panther Cave</desc>
+ <sym>Tunnel</sym>
+<type>Tunnel</type>
+ </rtept>
+ <rtept lat="42.453256000" lon="-71.121211000">
+ <ele>77.992066</ele>
+<time>2001-11-07T23:53:41Z</time>
+ <name>5252PURPLE</name>
+ <cmt>Purple Rock Hill</cmt>
+ <desc>Purple Rock Hill</desc>
+ <sym>Summit</sym>
+<type>Summit</type>
+ </rtept>
+ <rtept lat="42.457734000" lon="-71.117481000">
+ <ele>67.970400</ele>
+<time>2001-06-02T03:27:01Z</time>
+ <name>5287WATER</name>
+ <cmt>Reservoir</cmt>
+ <desc>Reservoir</desc>
+ <sym>Swimming Area</sym>
+<type>Reservoir</type>
+ </rtept>
+ <rtept lat="42.459278000" lon="-71.124574000">
+ <ele>81.076800</ele>
+<time>2001-06-02T03:27:00Z</time>
+ <name>5239ROAD</name>
+ <cmt>Road</cmt>
+ <desc>Road</desc>
+ <sym>Truck Stop</sym>
+<type>Road</type>
+ </rtept>
+ <rtept lat="42.458782000" lon="-71.118991000">
+ <ele>67.360800</ele>
+<time>2001-06-02T03:27:01Z</time>
+ <name>5278ROAD</name>
+ <cmt>Road</cmt>
+ <desc>Road</desc>
+ <sym>Truck Stop</sym>
+<type>Road</type>
+ </rtept>
+ <rtept lat="42.439993000" lon="-71.120925000">
+ <ele>53.949600</ele>
+<time>2001-06-02T00:18:14Z</time>
+ <name>5058ROAD</name>
+ <cmt>ROAD CROSSING</cmt>
+ <desc>Road Crossing</desc>
+ <sym>Dot</sym>
+<type>Road Crossing</type>
+ </rtept>
+ <rtept lat="42.453415000" lon="-71.106782000">
+ <ele>69.799200</ele>
+<time>2001-06-02T00:18:13Z</time>
+ <name>SHEEPFOLD</name>
+ <cmt>Sheepfold Parking Lot</cmt>
+ <desc>Sheepfold Parking Lot</desc>
+ <sym>Parking Area</sym>
+<type>Parking</type>
+ </rtept>
+ <rtept lat="42.455956000" lon="-71.107483000">
+ <ele>64.008000</ele>
+<time>2001-06-02T03:27:04Z</time>
+ <name>SOAPBOX</name>
+ <cmt>Soap Box Derby Track</cmt>
+ <desc>Soap Box Derby Track</desc>
+ <sym>Cemetery</sym>
+<type>Intersection</type>
+ </rtept>
+ <rtept lat="42.465913000" lon="-71.119328000">
+ <ele>64.533692</ele>
+<time>2001-11-07T23:53:41Z</time>
+ <name>5376STREAM</name>
+ <cmt>Stream Crossing</cmt>
+ <desc>Stream Crossing</desc>
+ <sym>Bridge</sym>
+<type>Bridge</type>
+ </rtept>
+ <rtept lat="42.445359000" lon="-71.122845000">
+ <ele>61.649902</ele>
+<time>2001-11-28T21:05:28Z</time>
+ <name>5144SUMMIT</name>
+ <cmt>Summit</cmt>
+ <desc>Summit</desc>
+ <sym>Summit</sym>
+<type>Summit</type>
+ </rtept>
+ <rtept lat="42.441727000" lon="-71.121676000">
+ <ele>67.360800</ele>
+<time>2001-06-02T00:18:16Z</time>
+ <name>5150TANK</name>
+ <cmt>WATER TANK</cmt>
+ <desc>Water Tank</desc>
+ <sym>Museum</sym>
+<type>Water Tank</type>
+ </rtept>
+</rte>
+</gpx>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<gpx
+ version="1.0"
+creator="GPSBabel - http://www.gpsbabel.org"
+xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+xmlns="http://www.topografix.com/GPX/1/0"
+xsi:schemaLocation="http://www.topografix.com/GPX/1/0 http://www.topografix.com/GPX/1/0/gpx.xsd http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd">
+<time>1970-01-01T00:00:00Z</time>
+<bounds minlat="42.430950000" minlon ="-71.122845000" maxlat="42.467110000" maxlon="-71.105116000" />
+<wpt lat="42.430950000" lon="-71.107628000">
+ <ele>23.469600</ele>
+<time>2001-06-02T00:18:15Z</time>
+ <name>BELLEVUE</name>
+ <cmt>BELLEVUE</cmt>
+ <desc>Bellevue Parking Lot</desc>
+ <sym>Parking Area</sym>
+</wpt>
+<wpt lat="42.431240000" lon="-71.109236000">
+ <ele>26.561890</ele>
+<time>2001-11-07T23:53:41Z</time>
+ <name>GATE6</name>
+ <cmt>Gate 6</cmt>
+ <desc>Gate 6</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.434980000" lon="-71.109942000">
+ <ele>45.307495</ele>
+<time>2001-11-07T23:53:41Z</time>
+ <name>PANTHRCAVE</name>
+ <cmt>Panther Cave</cmt>
+ <desc>Panther Cave</desc>
+ <sym>Tunnel</sym>
+</wpt>
+<wpt lat="42.436757000" lon="-71.113223000">
+ <ele>37.616943</ele>
+<time>2001-11-28T21:05:28Z</time>
+ <name>6014MEADOW</name>
+ <cmt>6014MEADOW</cmt>
+ <desc>6014MEADOW</desc>
+ <sym>Dot</sym>
+</wpt>
+<wpt lat="42.439018000" lon="-71.114456000">
+ <ele>56.388000</ele>
+<time>2001-06-02T03:26:55Z</time>
+ <name>6006</name>
+ <cmt>600698</cmt>
+ <desc>600698</desc>
+ <sym>Dot</sym>
+</wpt>
+<wpt lat="42.438594000" lon="-71.114803000">
+ <ele>46.028564</ele>
+<time>2001-11-28T21:05:28Z</time>
+ <name>6006BLUE</name>
+ <cmt>6006BLUE</cmt>
+ <desc>6006BLUE</desc>
+ <sym>Dot</sym>
+</wpt>
+<wpt lat="42.438917000" lon="-71.116146000">
+ <ele>44.826904</ele>
+<time>2001-11-16T23:03:38Z</time>
+ <name>5096</name>
+ <cmt>5096</cmt>
+ <desc>5096</desc>
+ <sym>Dot</sym>
+</wpt>
+<wpt lat="42.438878000" lon="-71.119277000">
+ <ele>44.586548</ele>
+<time>2001-11-28T21:05:28Z</time>
+ <name>5066</name>
+ <cmt>5066</cmt>
+ <desc>5066</desc>
+ <sym>Crossing</sym>
+</wpt>
+<wpt lat="42.439227000" lon="-71.119689000">
+ <ele>57.607200</ele>
+<time>2001-06-02T03:26:55Z</time>
+ <name>5067</name>
+ <cmt>5067</cmt>
+ <desc>5067</desc>
+ <sym>Dot</sym>
+</wpt>
+<wpt lat="42.439993000" lon="-71.120925000">
+ <ele>53.949600</ele>
+<time>2001-06-02T00:18:14Z</time>
+ <name>5058ROAD</name>
+ <cmt>ROAD CROSSING</cmt>
+ <desc>Road Crossing</desc>
+ <sym>Dot</sym>
+</wpt>
+<wpt lat="42.441727000" lon="-71.121676000">
+ <ele>67.360800</ele>
+<time>2001-06-02T00:18:16Z</time>
+ <name>5150TANK</name>
+ <cmt>WATER TANK</cmt>
+ <desc>Water Tank</desc>
+ <sym>Museum</sym>
+</wpt>
+<wpt lat="42.443904000" lon="-71.122044000">
+ <ele>50.594727</ele>
+<time>2001-11-28T21:05:28Z</time>
+ <name>5142</name>
+ <cmt>5142</cmt>
+ <desc>5142</desc>
+ <sym>Dot</sym>
+</wpt>
+<wpt lat="42.445359000" lon="-71.122845000">
+ <ele>61.649902</ele>
+<time>2001-11-28T21:05:28Z</time>
+ <name>5144SUMMIT</name>
+ <cmt>Summit</cmt>
+ <desc>Summit</desc>
+ <sym>Summit</sym>
+</wpt>
+<wpt lat="42.447298000" lon="-71.121447000">
+ <ele>127.711200</ele>
+<time>2001-06-02T03:26:58Z</time>
+ <name>5156</name>
+ <cmt>5156</cmt>
+ <desc>5156</desc>
+ <sym>Dot</sym>
+</wpt>
+<wpt lat="42.449765000" lon="-71.122320000">
+ <ele>119.809082</ele>
+<time>2001-11-07T23:53:41Z</time>
+ <name>5148NANEPA</name>
+ <cmt>Nanepashemet Road Crossing</cmt>
+ <desc>Nanepashemet Road Crossing</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.451442000" lon="-71.121746000">
+ <ele>74.627442</ele>
+<time>2001-11-07T23:53:41Z</time>
+ <name>5258</name>
+ <cmt>5258</cmt>
+ <desc>5258</desc>
+ <sym>Dot</sym>
+</wpt>
+<wpt lat="42.453256000" lon="-71.121211000">
+ <ele>77.992066</ele>
+<time>2001-11-07T23:53:41Z</time>
+ <name>5252PURPLE</name>
+ <cmt>Purple Rock Hill</cmt>
+ <desc>Purple Rock Hill</desc>
+ <sym>Summit</sym>
+</wpt>
+<wpt lat="42.456252000" lon="-71.119356000">
+ <ele>78.713135</ele>
+<time>2001-11-07T23:53:41Z</time>
+ <name>527631</name>
+ <cmt>527631</cmt>
+ <desc>527631</desc>
+ <sym>Dot</sym>
+</wpt>
+<wpt lat="42.456592000" lon="-71.119676000">
+ <ele>78.713135</ele>
+<time>2001-11-07T23:53:41Z</time>
+ <name>527614</name>
+ <cmt>527614</cmt>
+ <desc>527614</desc>
+ <sym>Dot</sym>
+</wpt>
+<wpt lat="42.457388000" lon="-71.119845000">
+ <ele>73.761600</ele>
+<time>2001-06-02T03:27:00Z</time>
+ <name>5267OBSTAC</name>
+ <cmt>Obstacle</cmt>
+ <desc>Obstacle</desc>
+ <sym>Amusement Park</sym>
+</wpt>
+<wpt lat="42.458148000" lon="-71.119135000">
+ <ele>68.275200</ele>
+<time>2001-06-02T03:27:00Z</time>
+ <name>5278</name>
+ <cmt>5278</cmt>
+ <desc>5278</desc>
+ <sym>Dot</sym>
+</wpt>
+<wpt lat="42.459377000" lon="-71.117693000">
+ <ele>64.008000</ele>
+<time>2001-06-02T03:27:01Z</time>
+ <name>5289</name>
+ <cmt>5289</cmt>
+ <desc>5289</desc>
+ <sym>Dot</sym>
+</wpt>
+<wpt lat="42.464183000" lon="-71.119828000">
+ <ele>52.997925</ele>
+<time>2001-11-28T21:05:28Z</time>
+ <name>5374FIRE</name>
+ <cmt>5374FIRE</cmt>
+ <desc>5374FIRE</desc>
+ <sym>Dot</sym>
+</wpt>
+<wpt lat="42.465650000" lon="-71.119399000">
+ <ele>56.388000</ele>
+<time>2001-06-02T03:27:02Z</time>
+ <name>5376</name>
+ <cmt>5376</cmt>
+ <desc>5376</desc>
+ <sym>Dot</sym>
+</wpt>
+<wpt lat="42.465913000" lon="-71.119328000">
+ <ele>64.533692</ele>
+<time>2001-11-07T23:53:41Z</time>
+ <name>5376STREAM</name>
+ <cmt>Stream Crossing</cmt>
+ <desc>Stream Crossing</desc>
+ <sym>Bridge</sym>
+</wpt>
+<wpt lat="42.467110000" lon="-71.113574000">
+ <ele>53.644800</ele>
+<time>2001-06-02T03:27:02Z</time>
+ <name>6328</name>
+ <cmt>6328</cmt>
+ <desc>6328</desc>
+ <sym>Dot</sym>
+</wpt>
+<wpt lat="42.466459000" lon="-71.110067000">
+ <ele>48.768000</ele>
+<time>2001-06-02T03:27:02Z</time>
+ <name>635722</name>
+ <cmt>635722</cmt>
+ <desc>635722</desc>
+ <sym>Dot</sym>
+</wpt>
+<wpt lat="42.466557000" lon="-71.109410000">
+ <ele>49.072800</ele>
+<time>2001-06-02T03:27:02Z</time>
+ <name>635783</name>
+ <cmt>635783</cmt>
+ <desc>635783</desc>
+ <sym>Dot</sym>
+</wpt>
+<wpt lat="42.463495000" lon="-71.107117000">
+ <ele>62.484000</ele>
+<time>2001-06-02T03:27:03Z</time>
+ <name>6373</name>
+ <cmt>6373</cmt>
+ <desc>6373</desc>
+ <sym>Dot</sym>
+</wpt>
+<wpt lat="42.465687000" lon="-71.107360000">
+ <ele>87.782400</ele>
+<time>2001-06-02T03:27:03Z</time>
+ <name>BEAR HILL</name>
+ <cmt>BEAR HILL TOWER</cmt>
+ <desc>Bear Hill Tower</desc>
+ <sym>Tall Tower</sym>
+</wpt>
+<wpt lat="42.459986000" lon="-71.106170000">
+ <ele>72.945191</ele>
+<time>2001-11-16T23:03:38Z</time>
+ <name>6289</name>
+ <cmt>6289</cmt>
+ <desc>6289</desc>
+ <sym>Dot</sym>
+</wpt>
+<wpt lat="42.457616000" lon="-71.105116000">
+ <ele>72.847200</ele>
+<time>2001-06-02T03:27:04Z</time>
+ <name>6297</name>
+ <cmt>6297</cmt>
+ <desc>6297</desc>
+ <sym>Dot</sym>
+</wpt>
+<wpt lat="42.453845000" lon="-71.105206000">
+ <ele>66.696655</ele>
+<time>2001-11-16T23:03:38Z</time>
+ <name>6283</name>
+ <cmt>6283</cmt>
+ <desc>6283</desc>
+ <sym>Dot</sym>
+</wpt>
+<wpt lat="42.451430000" lon="-71.105413000">
+ <ele>57.564209</ele>
+<time>2001-11-16T23:03:38Z</time>
+ <name>6280</name>
+ <cmt>6280</cmt>
+ <desc>6280</desc>
+ <sym>Dot</sym>
+</wpt>
+<wpt lat="42.448448000" lon="-71.106158000">
+ <ele>62.179200</ele>
+<time>2001-06-02T03:27:04Z</time>
+ <name>6177</name>
+ <cmt>6177</cmt>
+ <desc>6177</desc>
+ <sym>Dot</sym>
+</wpt>
+<wpt lat="42.447804000" lon="-71.106624000">
+ <ele>62.484000</ele>
+<time>2001-06-02T03:27:04Z</time>
+ <name>6176</name>
+ <cmt>6176</cmt>
+ <desc>6176</desc>
+ <sym>Dot</sym>
+</wpt>
+<wpt lat="42.444773000" lon="-71.108882000">
+ <ele>62.788800</ele>
+<time>2001-06-02T03:27:05Z</time>
+ <name>6153</name>
+ <cmt>6153</cmt>
+ <desc>6153</desc>
+ <sym>Dot</sym>
+</wpt>
+<wpt lat="42.443592000" lon="-71.106301000">
+ <ele>55.473600</ele>
+<time>2001-06-02T03:27:05Z</time>
+ <name>6171</name>
+ <cmt>6171</cmt>
+ <desc>6171</desc>
+ <sym>Dot</sym>
+</wpt>
+<wpt lat="42.442981000" lon="-71.111441000">
+ <ele>64.008000</ele>
+<time>2001-06-02T03:26:58Z</time>
+ <name>6131</name>
+ <cmt>6131</cmt>
+ <desc>6131</desc>
+ <sym>Dot</sym>
+</wpt>
+<wpt lat="42.442196000" lon="-71.110975000">
+ <ele>64.008000</ele>
+<time>2001-06-02T03:26:55Z</time>
+ <name>6130</name>
+ <cmt>6130</cmt>
+ <desc>6130</desc>
+ <sym>Dot</sym>
+</wpt>
+<wpt lat="42.441754000" lon="-71.113220000">
+ <ele>56.388000</ele>
+<time>2001-06-02T03:26:55Z</time>
+ <name>6029</name>
+ <cmt>6029</cmt>
+ <desc>6029</desc>
+ <sym>Dot</sym>
+</wpt>
+<wpt lat="42.439018000" lon="-71.114456000">
+ <ele>56.388000</ele>
+<time>2001-06-02T03:26:55Z</time>
+ <name>6006</name>
+ <cmt>600698</cmt>
+ <desc>600698</desc>
+ <sym>Dot</sym>
+</wpt>
+<wpt lat="42.436757000" lon="-71.113223000">
+ <ele>37.616943</ele>
+<time>2001-11-28T21:05:28Z</time>
+ <name>6014MEADOW</name>
+ <cmt>6014MEADOW</cmt>
+ <desc>6014MEADOW</desc>
+ <sym>Dot</sym>
+</wpt>
+<wpt lat="42.434980000" lon="-71.109942000">
+ <ele>45.307495</ele>
+<time>2001-11-07T23:53:41Z</time>
+ <name>PANTHRCAVE</name>
+ <cmt>Panther Cave</cmt>
+ <desc>Panther Cave</desc>
+ <sym>Tunnel</sym>
+</wpt>
+<wpt lat="42.431240000" lon="-71.109236000">
+ <ele>26.561890</ele>
+<time>2001-11-07T23:53:41Z</time>
+ <name>GATE6</name>
+ <cmt>Gate 6</cmt>
+ <desc>Gate 6</desc>
+ <sym>Waypoint</sym>
+</wpt>
+<wpt lat="42.430950000" lon="-71.107628000">
+ <ele>23.469600</ele>
+<time>2001-06-02T00:18:15Z</time>
+ <name>BELLEVUE</name>
+ <cmt>BELLEVUE</cmt>
+ <desc>Bellevue Parking Lot</desc>
+ <sym>Parking Area</sym>
+</wpt>
+</gpx>
${PNAME} -i gpx -f ${REFERENCE}/expertgps.gpx -o kml -F ${TMPDIR}/ge-eg.kml
compare ${TMPDIR}/ge-eg.kml ${REFERENCE}/earth-expertgps.kml
+#
+# Transformation filter (transform) tests
+#
+rm -f ${TMPDIR}/transform*
+${PNAME} -i gpx -f ${REFERENCE}/expertgps.gpx -x nuketypes,routes,tracks -x transform,rte=wpt,del=y -o gpx -F ${TMPDIR}/transform-rte.gpx
+compare ${TMPDIR}/transform-rte.gpx ${REFERENCE}/transform-rte.gpx
+${PNAME} -i gpx -f ${REFERENCE}/expertgps.gpx -x nuketypes,waypoints,tracks -x transform,wpt=rte,del=y -o gpx -F ${TMPDIR}/transform-wpt.gpx
+compare ${TMPDIR}/transform-wpt.gpx ${REFERENCE}/transform-wpt.gpx
+
+
exit 0
--- /dev/null
+/*
+
+ Transformation filter for GPS data.
+
+ Copyright (C) 2006 Olaf Klein, o.b.klein@gpsbabel.org
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111 USA
+
+ */
+
+#include "defs.h"
+#include "filterdefs.h"
+
+#if FILTERS_ENABLED
+
+#include <ctype.h>
+
+#define MYNAME "transform"
+
+static char current_target;
+static route_head *current_trk;
+static route_head *current_rte;
+
+static char *opt_routes, *opt_tracks, *opt_waypts, *opt_delete;
+
+static
+arglist_t transform_args[] = {
+ {"wpt", &opt_waypts, "Transformate track(s) or route(s) into waypoint(s) [R/T].", NULL,
+ ARGTYPE_STRING, ARG_NOMINMAX},
+ {"rte", &opt_routes, "Transformate waypoint(s) or track(s) into route(s) [W/T].", NULL,
+ ARGTYPE_STRING, ARG_NOMINMAX},
+ {"trk", &opt_tracks, "Transformate waypoint(s) or route(s) into tracks(s) [W/R].", NULL,
+ ARGTYPE_STRING, ARG_NOMINMAX},
+ {"del", &opt_delete, "Delete source data after transformation.", "N",
+ ARGTYPE_BOOL, ARG_NOMINMAX},
+ ARG_TERMINATOR
+};
+
+static void
+transform_waypoints(void)
+{
+ queue *elem, *tmp;
+ route_head *rte;
+
+ rte = route_head_alloc();
+ switch(current_target) {
+ case 'R': route_add_head(rte); break;
+ case 'T': track_add_head(rte); break;
+ }
+
+ QUEUE_FOR_EACH(&waypt_head, elem, tmp)
+ {
+ waypoint *wpt = (waypoint *) elem;
+
+ wpt = waypt_dupe(wpt);
+ switch(current_target) {
+ case 'R': route_add_wpt(rte, wpt); break;
+ case 'T': track_add_wpt(rte, wpt); break;
+ }
+ }
+}
+
+static void
+transform_rte_disp_hdr_cb(const route_head *rte)
+{
+ if (current_target == 'T') {
+ current_trk = route_head_alloc();
+ track_add_head(current_trk);
+ if (rte->rte_name && *rte->rte_name)
+ xasprintf(¤t_trk->rte_desc, "Generated from route %s", rte->rte_name);
+ }
+}
+
+static void
+transform_trk_disp_hdr_cb(const route_head *trk)
+{
+ if (current_target == 'R') {
+ current_rte = route_head_alloc();
+ route_add_head(current_rte);
+ if (trk->rte_name && *trk->rte_name)
+ xasprintf(¤t_rte->rte_desc, "Generated from track %s", trk->rte_name);
+ }
+}
+
+static void
+transform_any_disp_wpt_cb(const waypoint *wpt)
+{
+ waypoint *temp = waypt_dupe(wpt);
+ waypt_add(temp);
+}
+
+static void
+transform_routes(void)
+{
+ route_disp_all(transform_rte_disp_hdr_cb, NULL, transform_any_disp_wpt_cb);
+}
+
+static void
+transform_tracks(void)
+{
+ track_disp_all(transform_trk_disp_hdr_cb, NULL, transform_any_disp_wpt_cb);
+}
+
+/*******************************************************************************
+* %%% global callbacks called by gpsbabel main process %%% *
+*******************************************************************************/
+
+static void
+transform_init(const char *args)
+{
+}
+
+static void
+transform_deinit(void)
+{
+}
+
+static void
+transform_process(void)
+{
+ int delete_after = (opt_delete && (*opt_delete == '1')) ? 1 : 0;
+
+ if (opt_waypts != NULL) {
+ current_target = 'W';
+ switch(toupper(*opt_waypts)) {
+ case 'R':
+ transform_routes();
+ if (delete_after) route_flush_all_routes();
+ break;
+ case 'T':
+ transform_tracks();
+ if (delete_after) route_flush_all_tracks();
+ break;
+ default:
+ fatal(MYNAME ": Invalid option value (%s)!\n", opt_waypts);
+ }
+ }
+ if (opt_routes != NULL) {
+ current_target = 'R';
+ switch(toupper(*opt_routes)) {
+ case 'W':
+ transform_waypoints();
+ if (delete_after) waypt_flush_all();
+ break;
+ case 'T':
+ transform_tracks();
+ if (delete_after) route_flush_all_tracks();
+ break;
+ default:
+ fatal(MYNAME ": Invalid option value (%s)!\n", opt_routes);
+ }
+ }
+ if (opt_tracks != NULL) {
+ current_target = 'T';
+ switch(toupper(*opt_tracks)) {
+ case 'W':
+ transform_waypoints();
+ if (delete_after) waypt_flush_all();
+ break;
+ case 'R':
+ transform_routes();
+ if (delete_after) route_flush_all_routes();
+ break;
+ default:
+ fatal(MYNAME ": Invalid option value (%s)!\n", opt_tracks);
+ }
+ }
+}
+
+/*******************************************************************************/
+
+filter_vecs_t transform_vecs = {
+ transform_init,
+ transform_process,
+ transform_deinit,
+ NULL,
+ transform_args
+};
+
+/*******************************************************************************/
+
+#endif // FILTERS_ENABLED
--- /dev/null
+<para>
+ This filter can be used to convert GPS data between different data types.
+</para>
+<para>
+ Not all known and unknown GPS data formats has beed designed on
+ one common idea. So we have waypoint-only, route-only, track-only
+ and formats containing more than one of them.
+</para>
+<para>
+ To bring such different formats together we've implemented the transform
+ filter.
+</para>
+<para>
+ The following example show you how to create a route from a waypoint table.
+ <screen format="linespecific">gpsbabel -i csv waypts.txt -x transform,rte=wpt -o gpx -F route.gpx</screen>
+ Only the first letter of option value decides which transformation will be done.
+ Depending on the used option it can be only 'W' for waypoints, 'R' for routes or
+ 'T' for tracks.
+</para>